dflow:共同构建AI for Science和云原生时代的科学计算工作流
近日,DeepModeling社区发起了以「解放科学计算研究人员生产力」为目标的工作流框架dflow项目。在@zjgemi @amcadmus 等核心开发者的推动下,目前该项目正在紧锣密鼓的开发和使用节奏中。本文将介绍dflow的发起背景、主要特点、以及如何参与到dflow项目中。
我们相信,无论你感兴趣的是AI for Science(AI4S)的发展和应用,还是云原生、超算、科学计算的有机结合;无论你是在高校课题组、希望理顺祖传代码、少跟机器较劲、把时间真正花在探索未知上,还是在企业研发机构、希望改善研发管理、提升研发效能,dflow都值得你关注。从dflow开始,我们期待推动整个DeepModeling社区共同构建AI4S和云原生时代的科学计算工作流。
为什么发起dflow
长期以来,科学计算群体都面临一个尴尬的境地:科学研究的课题是最前沿的,但做科研的模式和工具是相对落后的。规模化算力、互联网、AI等的发展催生了云原生、MLOPS等实践,但这部分果实并未及时反哺到科学计算群体。传统科研模式表现在从算力使用、到方案实现都严重依赖或受限于组内采购的算力、软件形态,以及一些难以维护的祖传代码等。可维护性差、可迁移性差、改写难度大等等是这种模式的常见缺陷。
随着AI4S时代的到来,同步学习、高通量计算等类型的科学计算任务更是直戳传统模式的痛点。例如,在DeepModeling社区颇受欢迎的DP-GEN同步学习工作流中,数据采样、数据标注、模型训练等环节以迭代的方式在计算机上完成,实现了计算的闭环;且为了提升效率,不同环节使用的算力类型、规模可能不一样。传统的科学工作者往往手动向超算提交任务、等待任务完成后回收结果、进行一些处理后再提交下一个任务,来回往复。或者编写一个简单的脚本把这些过程串联起来。这样的工作方式虽然简单,但是在实际执行中存在诸多缺陷:
1
在逻辑上,由于缺乏抽象,下一个任务往往受到上一层任务的限制,步骤之间相互耦合。这导致步骤的复用性差,功能相似的步骤用在不同环境需要做修改;也导致可维护性差,由于难以从上下文中剥离出来,冗长的祖传代码谁也不愿修改,做单元测试也很困难。
2
在功能上,自己随手编写的串联脚本很难满足日益复杂的工作流设计需要,并且在存储管理和大规模调度方面,常常吃力不讨好,大量的精力被浪费在重复造轮子上。
3
在容错性上,如果计算过程中出现了一个bug,或是计算作业被意外中断,往往难以高效地定位问题,可观测性差,并且可能需要从头开始,可靠性差。
4
传统的小作坊似的工作方式迁移性差,我们花了大量时间写的串联脚本,也许在下一个场景、或不同的机器环境中便无法再次使用。
DeepModeling社区的一些项目在解决上述问题上做了一些尝试。比如DP-GEN在作业提交、异常处理等方面比简单的串联脚本更加考究。但由于缺乏更高级的抽象,脱离了特定的应用领域之后,相似的工作流逻辑难以避免需要用户重复实现。例如DP-GEN中的构型探索和使用DP模型进行性质计算具有相同的工作流结构,但代码复用率较低。
这个时候,一个针对科学计算工作者所开发的工作流套件显得极为重要。总的来说,我们需要这个工作流套件提供流程控制、作业调度等功能,并具有良好的可观测性和异常处理等能力。同时,它能够让科学工作者通过简单的调用接口来搭建工作流,无需关注底层实现。
在摸索的过程中,我们发现,在AI4S逐渐流行的当下,AI和互联网行业的发展也在云原生、MLOPS等方面积累了大量的实践经验。尽管各行业的具体场景不同,但很多问题特点有非常相似之处。dflow开发者在设计初期调研了若干现有方案,例如发起于材料计算领域的aiida暴露给使用者的细节较多,学习成本较高;诞生于互联网行业的airflow不支持动态、参数化的工作流(最近airflow发布了2.0版本,或许能减轻这些问题);Argo作为更新兴的工作流项目,其社区规模迅速扩大,得益于其功能强大、且与云原生的生态融合得更彻底,但缺乏对终端用户友好的交互接口。
dflow开发者决定基于Argo工作流引擎,在充分继承其功能和云原生特性的基础上,面向科学计算群体的需求和使用习惯,结合AI、算力、与科学计算的特点,设计发起dflow项目。
dflow的特点
简单来说,在众多工作流软件中,dflow有以下几个亮点:
1
从科学计算群体的知识背景出发,安装简单、上手容易、用法可以层层深入
2
dflow功能完备,可方便地支持科学计算面临的复杂流程逻辑需求
3
基于容器(container)和Kubernetes,dflow在作业管理上省心可靠
4
接口扩展性高,无缝对接各种计算资源
展开来说,dflow是一个使用云原生项目Argo作为工作流引擎,面向科学计算工作流开发者的开源Python开发框架。dflow支持并不限于
循环,递归,条件判断
把子工作流作为一个步骤来构造具有嵌套结构的工作流
指定异常处理的策略
灵活的重启动机制
可构造复杂、大规模的的自动化工作流,可靠性高,无缝对接个人电脑、超算集群、云资源等丰富的计算资源,为用户提供方便友好的函数式编程接口。dflow把工作流抽象为一系列operator和它们的运行规则,二者相互解耦,可以分别实现和测试。
在云原生时代,容器化技术的流行主要归功于它在保证了隔离属性的前提下,具有比虚拟机更加轻便节约的优点。计算作业运行在容器中,一方面解决了环境依赖管理的问题,在开发环境能运行的容器镜像,可以放心地提交到任何资源上进行生产;另一方面隔离性和标准化很大程度上保证了计算的可重复性。
Kubernetes是一种能自动化地调度、编排容器的工具,具有高可用、可扩展等特点。dflow将调度逻辑交给原生于Kubernetes的Argo工作流引擎,向下利用可靠的存储服务管理计算数据和运行状态,并借助扩展能力(例如虚拟节点技术)对接丰富的计算资源,向上屏蔽计算、存储等实现细节,使用户得以集中精力实现自己的业务逻辑,让开发领域应用变得事半功倍。
如何参与到dflow项目中
如果你感兴趣dflow的开发,推荐直接通过GitHub/Gitee与开发者取得联系。你的任何想法都将得到重视!由于项目尚处在相对早期的阶段,我们也将在近期逐渐从需求出发,组建沟通群组、搭建更多渠道。
如果你感兴趣利用dflow快速搭建属于你的工作流、提升你的科研效率、走上成为领域开发专家的快车道,请在GitHub/Gitee关注dflow、关注本公众号,随时了解相关动态。此外,欢迎你扫码加入「dflow用户交流群」一起探讨dflow的使用技巧!
dflow项目github地址:
https://github.com/deepmodeling/dflow
dflow项目gitee地址:
https://gitee.com/deepmodeling/dflow
dflow交流群二维码:
(如果二维码无法加入,请添加深度势能小编微信手动加入,小编微信为:xuxhvivian)
- End -
(如需转载图文请与公众号后台联系)
-------------------------------
推荐阅读
ABACUS :携手DeepModeling,做源自中国、开源开放的DFT软件